package com.dgwcode.joined.subclass;

import java.util.List;

import org.hibernate.Session;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import utils.HibernateUtils;

public class HibernateTest {
	
	private Session session;

	@Before
	public void before() {
		session = HibernateUtils.getSession();
		session.beginTransaction();
	}
	/**
	 * 优点:
	 * 1. 不需要使用了辨别者列.
	 * 2. 子类独有的字段能添加非空约束.
	 * 3. 没有冗余的字段. 
	 */
	/**
	 * 查询:
	 * 1. 查询父类记录, 使用左外联结
	 * 2.  对于子类记录, 做一个内连接查询. 
	 */
	@Test
	public void testGET() {
		
		//默认
		/*List list = session.createQuery("FROM Person").list();
		System.out.println(list.size());*/
		
		//自动加上类型
		List list2 = session.createQuery("FROM Student").list();
		System.out.println(list2.size());
		
	}
	
	/**
	 *  1.subclass 只产生一张表；
	 *  2.辨别者列是hibernate自动维护的
	 */
	@Test
	public void testJoinedSubClass() {
		Person person = new Person();
		
		person.setName("DGW");
		person.setAge(25);
		
		//session.save(person);
		
		
		Student student = new Student();
		student.setName("DGW");
		student.setAge(25);
		student.setSchool("WSY");
		
	
		//如果不写子类属性，并不会自动映射父类属性
		//session.save(person);
		//session.save(student);
		session.save(student);
	}
	
	@After
	public void after() {
		session.getTransaction().commit();
		session.close();
	}

}
